#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>

#include"SeqList.h"

////时间复杂度，
//// 
////斐波那契数列O(2^N)
//long long Fib(int N)
//{
//	if (N < 3)
//	{
//		return 1;
//	}
//	return Fib(N - 1) + Fib(N - 2);
//}
//
//
////阶乘递归O(N)
//long long Fac(size_t N)
//{
//	if (0 == N)
//	{
//		return 1;
//	}
//	return Fac(N-1)*N;
//}
//
////冒泡排序 最好O(N),最坏O(N^2)
//void BubbleSort(int* a, int n)
//{
//	assert(a);
//	for (size_t end = n; end > 0; --end)
//	{
//		int exchange = 0;
//		for (size_t i = 1; i < end; ++i)
//		{
//			if (a[i-1] > a[i])
//			{
//				Swap(&a[i - 1], &a[i]);
//				exchange = 1;
//			}
//		}
//		if (exchange = 0)
//		{
//			break;
//		}
//	}
//}
//
////经典二分查找 O(1),最坏O（logN）
//int BinarySearch(int* a, int n, int x)
//{
//	assert(a);
//	int begin = 0;
//	int end = n - 1;
//	while (begin < end)
//	{
//		int mid = begin + ((end - begin) >> 1);
//		if (a[mid] < x)
//		{
//			begin = mid + 1;
//		}
//		else if (a[mid] > x)
//		{
//			end = mid;
//		}
//		else
//		{
//			return mid;
//		}
//	}
//}
////寻找缺失的数{3，0，1}  1.异或法，不计数的顺序
//int missingNumber(int* nums, int numsSize)
//{
//	int val = 0;
//	for (int i = 0; i < numsSize; ++i)
//	{
//		val ^= nums[i];
//
//	}
//	for (int i = 0; i <= numsSize; ++i)
//	{
//		val ^= i;
//		return val;
//	}
//}

////逆序输入 nums = [1,2,3,4,5,6,7]
////[5,6,7,1,2,3,4]
//
////实现整体翻转，
//void reverse(int begin, int end, int* nums)
//{
//	while (begin < end)
//	{
//		int tmp = nums[begin];
//		nums[begin] = nums[end];
//		nums[end] = tmp;
//		++begin;
//		--end;
//	}
//}
//
////方法1
////时间复杂度O（N），空间复杂度O（1）
//void rotate(int* nums, int numsSize, int k)
//{
//	if (k>numsSize)//防止k比数组里有的数还大，发生越界
//	{
//		k %= numsSize;
//	}
//	reverse(nums,0,numsSize-k-1);//前n-k个逆置 4321  567
//	reverse(nums,numsSize-k,numsSize-1);//后k个逆置  4321 765
//	reverse(nums,0,numsSize-1);//整体逆置  567  1234
//}
//
//
////方法2，用memcpy函数，以空间换取时间
////时间复杂度O（N），空间复杂度O（N）
//void rotate(int* nums, int numsSize, int k)
//{
//	if (k > numsSize)//防止k比数组里有的数还大，发生越界
//	{
//		k %= numsSize;
//	}
//	int* tmp = (int*)malloc(sizeof(int) * numsSize);
//	//拷贝后k个
//	memcpy(tmp, nums + numsSize - k, sizeof(int) * k);
//	memcpy(tmp + k, nums, sizeof(int) * (numsSize - k));
//	memcpy(nums,tmp, sizeof(int) * numsSize);
//	free(tmp);
//	tmp = NULL;
//
//}

//顺序表

//SL s;//定义成全局变量，以初始化（否则报错成使用未初始化变量）
void TestSeqList1()
{
	SL s;
	SLInit(&s);//初始化
	//SLPushBack(&s, 1);
   	SLPushBack(&s, 1);
	SLPushBack(&s, 2);
	SLPushBack(&s, 3);
	SLPushBack(&s, 4);
	SLPushBack(&s, 5);//多加一组，出问题
	SLPushBack(&s, 6);
	SLPushBack(&s, 7);
	SLPushBack(&s, 8);
	SLPushBack(&s, 9);
	SLPrint(&s);

	SLPopBack(&s);
	SLPopBack(&s);
	SLPrint(&s);

	SLPopBack(&s);
	SLPopBack(&s);
	SLPopBack(&s);
	SLPopBack(&s);
	SLPopBack(&s);
	SLPopBack(&s);
	SLPopBack(&s);
	//SLPopBack(&s);
	SLPrint(&s);

	SLPushBack(&s, 10);
	SLPushBack(&s, 20);
	SLPrint(&s);

	SLDestroy(&s);

}
int main()
{
	TestSeqList1();
	
	return 0;
}